/* global  expect, describe, it, apiTest */

const App = require('./fn')

describe('应用 - 列表', function() {
  it('列表 - 正常', function() {
    return App.checkList()
  })
})

describe('应用 - 集成测试', function() {
  it('新增>修改>查询>删除', function() {
    // 增
    var post = App.randOne()
    return apiTest.post('/app/create', post).then(function(res) {
      var data = apiTest.apiOk(res)
      App.checkOne(data, post)
      // 改查
      return App.editOne(data._id, (post) => {
        // 删
        return App.removeOne(data._id)
      })
    })
  })
  it('新增多次>批量禁用>批量启用>批量删除', function() {
    // 增
    var _id = []
    var post = App.randOne()
    return apiTest.post('/app/create', post).then(function(res) {
      var data = apiTest.apiOk(res)
      _id.push(data._id)
      // 增
      post = App.randOne()
      return apiTest.post('/app/create', post).then(function(res) {
        var data = apiTest.apiOk(res)
        _id.push(data._id)
        // 批量禁用
        return App.enableOne(_id, false, function() {
          // 批量启用
          return App.enableOne(_id, true, function() {
            // 删
            return App.removeOne(_id)
          })
        })
      })
    })
  })
})

describe('应用 - 异常用例', function() {
  it('详情 - 异常| 无参数', function() {
    return apiTest.get('/app/findOne', {})
      .then(function(res) {
        var error = apiTest.apiErr(res, 31000)
        expect(error.param).to.equal('_id')
      })
  })

  it('详情 - 异常| 数据不存在', function() {
    return apiTest.get('/app/findOne', { _id: '500000000000000000000000' })
      .then(function(res) {
        apiTest.apiErr(res, 32000)
      })
  })

  it('添加 - 异常| 必填项: 应用名称', function() {
    return apiTest.post('/app/create', {}).then(function(res) {
      var error = apiTest.apiErr(res, 31000)
      expect(error.param).to.equal('name')
    })
  })

  it('添加 - 异常| 必填项: 应用网关', function() {
    var post = App.randOne()
    delete post.gateway
    return apiTest.post('/app/create', post).then(function(res) {
      var error = apiTest.apiErr(res, 31000)
      expect(error.param).to.equal('gateway')
    })
  })

  it('删除 - 异常| 不存在', function() {
    return apiTest.post('/app/remove', { _id: '500000000000000000000000' }).then(function(res) {
      apiTest.apiErr(res, 32000)
    })
  })
})
